package com.molichuxing.gateway.bff.order.services;

import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.exception.BizException;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.gateway.bff.order.entity.request.modify.OrderCreditAuditModifyVo;
import com.molichuxing.gateway.bff.order.entity.request.modify.OrderOfflineDeliveryModifyVo;
import com.molichuxing.gateway.bff.order.entity.request.modify.OrderOfflineDownPayModifyVo;
import com.molichuxing.gateway.bff.order.entity.response.OrderAuditVo;
import com.molichuxing.gateway.bff.order.entity.response.OrderCostDetailsVo;
import com.molichuxing.gateway.bff.order.entity.response.OrderExclusivelBaseVo;
import com.molichuxing.gateway.bff.order.entity.response.OrderExclusivelRepaymentDetailVo;
import com.molichuxing.gateway.bff.order.entity.response.OrderExclusivelVo;
import com.molichuxing.gateway.bff.order.entity.response.OrderTradeFlowVo;
import com.molichuxing.services.property.OrderListTypeEnum;

/**
 * 专属里程订单相关bff
 * 
 * @author zoumingyu
 * @date 2019年8月23日
 *
 */
public interface OrderExclusivelBffService extends RootService {

	/**
	 * 分页获取专属里程订单信息
	 * 
	 * @param params
	 *            listType：列表类型-enum <br />
	 *            orderStatus：订单状态-enum <br />
	 *            orderCode：订单号-long <br />
	 *            userName：用户账号-string <br />
	 *            userRealName：用户姓名-string <br />
	 *            userPhone：用户手机号-string <br />
	 *            storeId：下单门店id-int <br />
	 *            storeName：下单门店name<br />
	 *            orderTimeStart：下单开始时间-LocalDate <br />
	 *            orderTimeEnd：下单结束时间-LocalDate <br />
	 * @param pageNum
	 *            页数
	 * @param pageSize
	 *            每页条数
	 * @return
	 * @throws Exception
	 */
	public Paged<OrderExclusivelVo> getOrderList(Map<String, Object> params, int pageNum, int pageSize)
			throws Exception;

	/**
	 * 获取专属里程订单交易流程
	 * 
	 * @param orderCode
	 *            订单号
	 * @param listType
	 *            列表类型-enum
	 * @return
	 * @throws Exception
	 */
	public List<OrderTradeFlowVo> getOrderTradeFlow(Long orderCode, OrderListTypeEnum listType) throws Exception;

	/**
	 * 获取专属里程订单基础信息
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 * @throws Exception
	 */
	public OrderExclusivelBaseVo getOrderBase(Long orderCode) throws Exception;

	/**
	 * 获取订单费用交易明细
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 */
	public List<OrderCostDetailsVo> getOrderCostDetails(Long orderCode);

	/**
	 * 获取订单详情还款信息
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 */
	public OrderExclusivelRepaymentDetailVo getOrderExclusivelRepaymentDetail(Long orderCode);

	/**
	 * 订单征信审核
	 * 
	 * @param modifyVo
	 * @return
	 * @throws Exception
	 */
	public Boolean modifyOrderCreditAudit(OrderCreditAuditModifyVo modifyVo) throws BizException, Exception;

	/**
	 * 查询订单审核信息
	 * 
	 * @param orderCode
	 * @return
	 */
	public OrderAuditVo getOrderCreditAudit(Long orderCode);

	/**
	 * 专属订单-订悦订单首付
	 * 
	 * @param modifyVo
	 * @return
	 */
	public Boolean modifyOrderOfflineDownPay(OrderOfflineDownPayModifyVo modifyVo);

	/**
	 * 专属订单-订悦订单提车
	 * 
	 * @param modifyVo
	 * @return
	 * @throws Exception
	 */
	public Boolean modifyOrderOfflineDelivery(OrderOfflineDeliveryModifyVo modifyVo) throws Exception;
}
